//输入一个英文句子，翻转句子中单词的顺序，但单词内字符的顺序不变。为简单起见，标点符号和普通字母一样处理。例如输入字符串"I am a student. "，
//则输出"student. a am I"。 
//
// 
//
// 示例 1： 
//
// 输入: "the sky is blue"
//输出: "blue is sky the"
// 
//
// 示例 2： 
//
// 输入: "  hello world!  "
//输出: "world! hello"
//解释: 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。
// 
//
// 示例 3： 
//
// 输入: "a good   example"
//输出: "example good a"
//解释: 如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。
// 
//
// 
//
// 说明： 
//
// 
// 无空格字符构成一个单词。 
// 输入字符串可以在前面或者后面包含多余的空格，但是反转后的字符不能包括。 
// 如果两个单词间有多余的空格，将反转后单词间的空格减少到只含一个。 
// 
//
// 注意：本题与主站 151 题相同：https://leetcode-cn.com/problems/reverse-words-in-a-string/ 
//
//
// 注意：此题对比原题有改动 
// Related Topics 字符串 
// 👍 59 👎 0

package leetcode.editor.cn;
//Java：翻转单词顺序
public class FanZhuanDanCiShunXuLcof{
    public static void main(String[] args) {
        Solution solution = new FanZhuanDanCiShunXuLcof().new Solution();
        
    }
    
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String reverseWords(String s) {
        //  双指针
        //先找到对应的单词，然后看是不是第一位或者是左边一位是空格。
        //构建一个单词数组
        //选中范围，进行复制。
        //首尾空格要进行删除
        if ( s == null ){
            return null;
        }
        //删除头尾空格
        s = s.trim();
        //下标要长度-1
        int j = s.length() - 1 ;
        int i = j;
        StringBuffer stringBuffer = new StringBuffer();
        while ( i>=0 ){
            //从右向左搜索首个空格
            while ( i>=0 && s.charAt(i) != ' ' ){
                i--;
            }
            //记录单词
            stringBuffer.append( s.substring( i+1,j+1 ) + ' ' );
            //跳过单词间的空格
            while ( i>=0 && s.charAt(i) == ' ' ){
                i--;
            }
            //j重新指向i所在的位置，单词的末尾
            j = i;
        }
        //转化为字符串
        return stringBuffer.toString().trim();
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
